package com.opentravelsoft.providers.hibernate; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; import org.hibernate.LockMode; import org.hibernate.criterion.CriteriaSpecification; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.MatchMode; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.stereotype.Repository; import com.opentravelsoft.entity.Employee; import com.opentravelsoft.entity.Role; import com.opentravelsoft.entity.Team; import com.opentravelsoft.providers.EmployeeDao; import com.opentravelsoft.util.RowDataUtil; import com.opentravelsoft.util.StringUtil; @Repository("EmployeeDao") public class EmployeeDaoImpl extends GenericDaoHibernate<Employee, Integer> implements EmployeeDao { public EmployeeDaoImpl() { super(Employee.class); } @SuppressWarnings("unchecked") public Employee getEmployeeByName(String userName) { StringBuilder sql = new StringBuilder(); sql.append("from Employee where userCd=? "); Object[] obj1 = { userName }; List<Employee> list = getHibernateTemplate().find(sql.toString(), obj1); Employee emp = null; if (list.size() > 0) { emp = list.get(0); emp.setDepartmentName(emp.getGroup().getName()); Set<String> st = new HashSet<String>(); Set<Integer> in = new HashSet<Integer>(); for (Role role : emp.getMemberships()) { in.add(RowDataUtil.getInt(role.getRoleId())); st.add(RowDataUtil.getString(role.getRoleCode())); } emp.setRoleids(in); emp.setRoles(st); // ---------------------------------------------------------------- StringBuilder sql1 = new StringBuilder(); sql1.append("select u.moduleName,a.permissionKey,p.allowAccess "); sql1.append("from ModulePermission p,"); sql1.append("Employee m join m.memberships r,"); sql1.append("Module u,"); sql1.append("Permission a "); sql1.append("where r.roleId=p.roleId "); sql1.append("and u.moduleId=p.moduleId "); sql1.append("and a.permissionId=p.permissionId "); sql1.append("and m.userId=? "); Object[] param = { emp.getUserId() }; List<Object[]> list2 = getHibernateTemplate() .find(sql1.toString(), param); Map<String, String> in1 = new TreeMap<String, String>(); for (Object[] role : list2) { String key = RowDataUtil.getString(role[0]) + "_" + RowDataUtil.getString(role[1]).toLowerCase(); if (in1.containsKey(key) && in1.get(key).equalsIgnoreCase("true")) continue; in1.put(key, role[2].toString()); } emp.setPriv(in1); } return emp; } public Employee getEmployee(int userId) { Employee employee = getHibernateTemplate().get(Employee.class, userId); if (null != employee) { Set<String> st = new HashSet<String>(); Set<Integer> in = new HashSet<Integer>(); for (Role role : employee.getMemberships()) { in.add(RowDataUtil.getInt(role.getRoleId())); st.add(RowDataUtil.getString(role.getRoleCode())); } employee.setRoleids(in); employee.setRoles(st); Set<Integer> in1 = new HashSet<Integer>(); for (Team team : employee.getTeamMemberships()) { in1.add(RowDataUtil.getInt(team.getTeamId())); } employee.setTeams(in1); } return employee; } @SuppressWarnings("unchecked") public List<Employee> getEmployees(int groupId, String userName) { DetachedCriteria criteria = DetachedCriteria.forClass(Employee.class); if (groupId != 0) criteria.add(Restrictions.eq("group.groupId", groupId)); if (StringUtil.hasLength(userName)) criteria.add(Restrictions.like("userName", userName.trim(), MatchMode.ANYWHERE)); criteria.addOrder(Order.asc("userCd")); criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY); return getHibernateTemplate().findByCriteria(criteria); } public int deleteEmployee(int userId) { Employee employee = (Employee) getHibernateTemplate().get(Employee.class, userId, LockMode.PESSIMISTIC_WRITE); if (employee == null) { return -1; } employee.setIsActive(false); getHibernateTemplate().update(employee); return 0; } @SuppressWarnings("unchecked") public int insertEmployee(Employee empl) { StringBuilder sql = new StringBuilder(); sql.append("from Employee where userCd=? "); Object[] obj1 = { empl.getUserName() }; List<Employee> list = getHibernateTemplate().find(sql.toString(), obj1); if (list.size() == 0) { Employee employee = new Employee(); employee.setUserId(empl.getUserId()); employee.setUserCd(empl.getUid()); employee.setUserName(empl.getUserName()); employee.setPasswd(empl.getPasswd()); employee.setPhone(empl.getPhone()); employee.setFax(empl.getFax()); employee.setGroup(empl.getGroup()); // 0普通 2销售 employee.setWorkKey(empl.getWorkKey()); employee.setIsActive(empl.getIsActive()); employee.setAge(empl.getAge()); employee.setSex(empl.getSex()); employee.setCardId(empl.getCardId()); // 客服 employee.setCtiNo(empl.getCtiNo()); employee.setIsAdmin(empl.getIsAdmin()); // Role for (Integer role_id : empl.getRoleids()) { employee.addMembership(new Role(role_id)); } // Team for (Integer team_id : empl.getTeams()) { employee.addTeamMembership(new Team(team_id)); } // 保存 getHibernateTemplate().save(employee); } else { return -1; } return 0; } public int update(Employee employee) { Employee t105 = (Employee) getHibernateTemplate().get(Employee.class, employee.getUserId(), LockMode.PESSIMISTIC_WRITE); if (t105 == null) { log.error("The userId= " + employee.getUserId() + ",not found"); return -1; } t105.setUserName(employee.getUserName()); if (StringUtil.hasLength(employee.getPasswd())) t105.setPasswd(employee.getPasswd()); t105.setPhone(employee.getPhone()); t105.setFax(employee.getFax()); t105.setGroup(employee.getGroup()); t105.setWorkKey(employee.getWorkKey()); t105.setIsActive(employee.getIsActive()); t105.setAge(employee.getAge()); t105.setSex(employee.getSex()); t105.setCardId(employee.getCardId()); // 客服部分 t105.setCtiNo(employee.getCtiNo()); t105.setIsAdmin(employee.getIsAdmin()); // Role t105.setMemberships(new HashSet<Role>(0)); for (Integer role_id : employee.getRoleids()) { t105.getMemberships().add(new Role(role_id)); } // Team t105.setTeamMemberships(new HashSet<Team>(0)); for (Integer team_id : employee.getTeams()) { t105.addTeamMembership(new Team(team_id)); } getHibernateTemplate().update(t105); return 0; } @SuppressWarnings("unchecked") public List<Employee> getEmployees(boolean enabled) { DetachedCriteria criteria = DetachedCriteria.forClass(Employee.class); if (enabled) criteria.add(Restrictions.eq("isActive", true)); criteria.addOrder(Order.asc("userName")); criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY); return getHibernateTemplate().findByCriteria(criteria); } public int updateEmployee(Employee employee) { Employee t105 = (Employee) getHibernateTemplate().get(Employee.class, employee.getUserId(), LockMode.PESSIMISTIC_WRITE); if (t105 == null) { log.error("user not find."); return -1; } t105.setUserName(employee.getUserName()); if (StringUtil.hasLength(employee.getPasswd())) t105.setPasswd(employee.getPasswd()); t105.setPhone(employee.getPhone()); t105.setFax(employee.getFax()); getHibernateTemplate().update(t105); return 0; } @SuppressWarnings("unchecked") public Set<String> getAuthorities(int userId) { StringBuilder sql1 = new StringBuilder(); sql1.append("select r.roleCode "); sql1.append("from Employee u join u.memberships r "); sql1.append("where u.userId=?"); Object[] params = { userId }; List<Object> list1 = getHibernateTemplate().find(sql1.toString(), params); Set<String> st = new HashSet<String>(); for (Object authorities : list1) { st.add(RowDataUtil.getString(authorities)); } return st; } @SuppressWarnings("unchecked") public List<Employee> getSalesmans(boolean active) { HibernateTemplate template = getHibernateTemplate(); StringBuilder sql = new StringBuilder(); sql.append("from Employee where workKey='2' "); if (active) sql.append("and isActive=true "); List<Employee> list = template.find(sql.toString()); return list; } @SuppressWarnings("unchecked") public List<Employee> getSalesByTeam(int teamId) { DetachedCriteria criteria = DetachedCriteria.forClass(Employee.class, "u"); criteria.createAlias("u.teamMemberships", "t"); criteria.add(Restrictions.eq("t.teamId", teamId)); criteria.add(Restrictions.eq("u.isActive", true)); criteria.add(Restrictions.eq("u.workKey", "2")); criteria.addOrder(Order.asc("u.userName")); criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY); return getHibernateTemplate().findByCriteria(criteria); } @SuppressWarnings("unchecked") public List<Employee> getUserByTeam(int teamId) { StringBuilder sql = new StringBuilder(); sql.append("select u.userId,u.userCd,u.userName "); sql.append("from Employee u join u.teamMemberships t "); sql.append("where t.teamId=? "); sql.append("and u.isActive=true order by u.userName"); Object[] params = { teamId }; List<Object[]> tfjs = getHibernateTemplate().find(sql.toString(), params); List<Employee> list = new ArrayList<Employee>(); Employee empl = null; if (tfjs.size() > 0) { list = new ArrayList<Employee>(); for (Object[] obj : tfjs) { empl = new Employee(); empl.setUserId(RowDataUtil.getInt(obj[0])); empl.setUid(RowDataUtil.getString(obj[1])); empl.setUserName(RowDataUtil.getString(obj[2])); list.add(empl); } } return list; } }